﻿#pragma once
#include <stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<stdbool.h>
#include<locale.h>
#include<time.h>

#define KEY_PRESS(VK) ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )//获取按键的情况
#define WALL L'□'
#define BODY L'●'
#define FOOD L'★'

//蛇的结构定义

//移动方向
enum direction
{
	UP = 1,
	DOWN,
	LEFT,
	RIGHT,
};

//游戏状态
enum state
{
	NORMAL = 1,//正常游戏
	KILL_BY_WALL,//撞墙死亡
	KILL_BY_SELF,//撞身体死亡
	ESC//正常退出
};
//蛇身的链表
typedef struct SnakeNode {
	short x;
	short y;
	struct SnakeNode* next;
}SnakeNode,*pSnakeNode;
//蛇的属性
typedef struct Snake {
	pSnakeNode head;//蛇头
	pSnakeNode food;//食物
	enum state state;//游戏状态
	enum direction dir;//移动方向
	short speed;//速度
	short food_weight;//食物的权重
	int sorce;//总得分
	
}Snake,*pSnake;

//欢迎函数
void Welcome();
//设置光标位置
void SetPos(short x, short y);
//游戏开始的设置函数
void GameStart(pSnake snake);
//设置地图
SetMap();
//设置蛇
void SetSnake(pSnake snake);
//设置食物并打印
void SetFood(pSnake snake);
//打印帮助信息
void PrintfHelp(pSnake snake);

//游戏进行函数
void GameRun(pSnake snake);
//方向改变函数
void DirChange(pSnake snake);
//暂停函数
void Stop();
//蛇的移动函数
void SnakeMove(pSnake snake);
//吃食物移动的处理
void EatFood(pSnake snake, pSnakeNode next);
//撞身体死亡
void KillByBody(pSnake snake, pSnakeNode next);
//撞墙结束
void KillByWall(pSnake snake, pSnakeNode next);

//游戏结束
void GameEnd(pSnake snake);
